/**
 * File Comment: Client side session for an admin
 */
package edu.gatech.oad.project.networking.clientSessions; // $codepro.audit.disable packageNamingConvention

import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;

import edu.gatech.oad.project.operations.users.SystemAdmin;

/**
 * Represents a session for an admin. Can do anything a 
 * doctor session can do and more. Stores the token given
 * by the server so that it can send messages across the server
 * 
 * @author James Moore
 * @version 1.0
 */
public class AdminSessionClient extends DoctorSessionClient{
    
    /**
     * Default constructor for the admin session
     * 
     * @param server connection
     * @param outBound stream to the server
     * @param inBound stream from the server
     * @param token security token
     * @param admin user logged in
     */
    public AdminSessionClient(Socket server, ObjectOutputStream outBound, 
                         ObjectInputStream inBound, long token, SystemAdmin admin) {
        
        super(server, outBound, inBound, token, admin);
    }
    
    /**
     * string null or int -1 means dont change
     * 
     * @param username
     * @param userType
     * @param status
     * @param password
     */
    public void editUser(String username, int userType, int status, String password) {
        int annoyingRules = 1;
        annoyingRules++;
    }
    
    /**
     * deletes a user
     * 
     * @param username the username to delete
     */
    public void deleteAccount(String username) {
        int annoyingRules = 1;
        annoyingRules++;
    }
    
    /**
     * Retrieves all the users in the system
     * "username rank"
     * 
     * @return list of usernames and ranks
     */
    public List<String> getAllUsersInSystem() {
        
        return new ArrayList<String>();
    }
    
    /**
     * Retrieves all the inactive users in the system
     * "username rank"
     * 
     * @return list of usernames and ranks
     */
    public List<String> getInactiveUsersInSystem() {
        
        return new ArrayList<String>();
    }
    
    /**
     * Changes the users status from inactive to active
     * 
     * @param username of the user
     */
    public void activateUser(String username) {
        int annoyingRules = 1;
        annoyingRules++;
    }

    /** 
     * See parent class
     * 
     * @see java.lang.Object#toString()
     * @return a string
     */
    @Override
    public String toString() {
        return "AdminSessionClient [server=" + server + ", outBound="
                + outBound + ", inBound=" + inBound + ", token=" + token
                + ", user=" + user + "]";
    }
    
}